<!DOCTYPE html>
<html lang="zh">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>
    
    数组作为函数参数 - DSRBLOG
    
  </title>
  

  
  
  <link href="atom.xml" rel="alternate" title="DSRBLOG" type="application/atom+xml">
  <link rel="stylesheet" href="asset/css/style.min.css">
  <link rel="stylesheet" href="asset/css/doc.css">
  <script src="asset/app.js"></script>


</head>

<body> <section class="ct-body">
	<div class="container">
		<div class="columns is-variable bd-klmn-columns is-4 is-centered">
			<div class="column is-four-fifths">
				<div class="post-body single-content">
					
					<h1 class="title">
						数组作为函数参数
					</h1>


					<div class="media">
						
						
						<div class="media-content">
							<div class="content">
								<p>
									<span class="date">2022/01/14 20:07 下午</span>
									

									

									<br />
									<span class="tran-tags">Tags:</span>&nbsp;
									
									<a class="tag is-link is-light">#C语言</a>
									

								</p>
							</div>
						</div>

					</div>
				</div>
				<article class="markdown-body single-content">
					<h2><a id="%E6%95%B0%E7%BB%84%E5%85%83%E7%B4%A0%E4%BD%9C%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>数组元素作函数参数</h2>
<ul>
<li>数组元素可以作为函数的<code>实参</code>，与用变量做<code>实参</code>一样，是单向传递，即<code>值传递</code>方式</li>
</ul>
<h3><a id="%E4%BE%8B" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>例</h3>
<p>有两个运动队a和b，各有五名队员，将两队每个队员的成绩按顺序逐个进行比较，如果a队队员的成绩高于b队相应队员的成绩，a队加1分，反之，最后分数最高的队伍获胜。</p>
<pre class="line-numbers"><code class="language-c">#include &lt;stdio.h&gt;

int main()
{
    int higher(int, int); //声明higher()函数（省略参数名）
    int a[5], b[5];       //定义数组a[],b[]
    int i, ax, bx;

    for (i = 0; i &lt; 5; i++)
        scanf(&quot;%d&quot;, &amp;a[i]);

    for (i = 0; i &lt; 5; i++)
        scanf(&quot;%d&quot;, &amp;b[i]);

    for (i = 0; i &lt; 5; i++)
    {
        if (higher(a[i], b[i]) == 1)
            ax += 1;
        else if (higher(a[i], b[i]) == -1)
            bx += 1;
    }
    printf(&quot;%c&quot;, ax &gt; bx ? 'a' : 'b'); //比较a、b两队分数并输出结果
    return 0;
}

int higher(int x, int y) //定义higher()函数
{
    int flag = 0;
    if (x &gt; y)
        return 1;
    else if (x &lt; y)
        return -1;
    else
        return 0;
}
</code></pre>
<h2><a id="%E6%95%B0%E7%BB%84%E5%90%8D%E4%BD%9C%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>数组名作函数参数</h2>
<ul>
<li>可以用<code>数组名</code>作<code>函数参数</code>，此时并不是将该数组中全部元素传递给所对应的<code>形参</code>，由于<code>数组名</code>代表数组的<code>首地址</code>，只是将数组的<code>首元素的地址</code>传递给所对应的<code>形参</code>，因此对应的<code>形参</code>应当是<code>数组名</code>或<code>指针变量</code></li>
</ul>
<h3><a id="%E4%BE%8B" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>例</h3>
<p>有五个学生成绩，用一个函数求全体学生的平均成绩</p>
<pre class="line-numbers"><code class="language-c">#include &lt;stdio.h&gt;

int main()
{
    double average(int a[5]); //声明average()函数(函数名、数组名、变量名在同一范围内不允许重复)
    int a[5];
    double avg;
    int i;
    for (i = 0; i &lt; 5; i++)
        scanf(&quot;%d&quot;, &amp;a[i]);
    avg = average(a); //数组名为参数
    printf(&quot;%.2 f&quot;, avg);
    return 0;
}

double average(int a[5]) //定义average()函数
{
    double sum = 0;
    int i;
    for (i = 0; i &lt; 5; i++)
        sum += a[i];
    sum /= 5;
    return sum;
}
</code></pre>
<h4><a id="%E8%AF%B4%E6%98%8E" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>说明</h4>
<ul>
<li>
<p>程序中用<code>数组名</code>作<code>函数实参</code>，函数<code>average()</code>的<code>形参</code>也定义为数组。注意应在主调函数和被调用函数<em>分别</em>定义数组，不能只在一方定义。</p>
</li>
<li>
<p><code>实参数组</code>与<code>形参数组</code>类型应一致</p>
</li>
<li>
<p>用数组作为函数参数，在调用函数时<em>并不另外开辟一个存放形参数组的空间</em>，这点与用变量做函数参数不同。数组名代表数组的<em>首元素的地址</em>，因此，用数组名作函数实参时，只是将实参数组的首元素的地址传递给形参数组</p>
</li>
</ul>
<p><strong>  提示：</strong>  <code>形参数组</code>与<code>实参数组</code>的<code>数组名</code>指向相同的存储单元，本质上是同一个数组，称为<em>传址（传地址）</em>，<code>形参变量</code>和<code>实参变量</code>是两个变量，拥有各自的存储空间。</p>
<h3><a id="%E4%BE%8B" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>例</h3>
<p>用一个函数实现用选择法对10个整数的升序排列。</p>
<pre class="line-numbers"><code class="language-c">#include &lt;stdio.h&gt;

int main()
{
    void x(int arr[10]);
    int a[10] = {7, 1, 3, 4, 2, 5, 8, 0, 6, 9};
    int i;
    for (i = 0; i &lt; 10; i++)
        printf(&quot;%d &quot;, a[i]);
    printf(&quot;\n&quot;);
    x(a);
    for (i = 0; i &lt; 10; i++)
        printf(&quot;%d &quot;, a[i]);
    return 0;
}

void x(int arr[10])
{
    int i, j;
    int t, pos, min;
    for (i = 0; i &lt; 10; i++) //从数组的第一个元素开始，直到最后一个元素
    {
        min = arr[i];
        pos = i;
        for (j = i + 1; j &lt; 10; j++) //与后面的所有元素一次比较，找到最小的元素
        {
            if (min &gt; arr[j])
            {
                min = arr[j];
                pos = j;
            }
        }
        if (pos != i) //如果最小元素不是当前元素，将当前元素与最小元素交换位置
        {
            t = arr[pos];
            arr[pos] = arr[i];
            arr[i] = t;
        }
    }
}
</code></pre>

				</article>
				<div class="comments-wrap">
					<div class="share-comments">
						

						

						
					</div>
				</div><!-- end comments wrap -->
			</div>
		</div><!-- end columns -->
	</div><!-- end container -->
</section>  














<script src="asset/prism.js"></script>









</body>

</html>